/*给一个整数数组，调整每个数的大小，使得相邻的两个数的差不大于一个给定的整数target，调整每个数的代价为调整前后的差的绝对值，求调整代价之和最小是多少。
 注意事项:你可以假设数组中每个整数都是正整数，且小于等于100。*/
 
//样例 对于数组[1, 4, 2, 3]和target=1。求调整代价之和最小。
class Obj{
	weight,value;
	Obj(weight,value){
	}
}
//因为本题没有实际的weight，将weight初始化为1，value表示实际的数值。
list=[new Obj(1,1),new Obj(1,4),new Obj(1,2),new Obj(1,3)];
count = list.size();
bagSize = 100;
target = 1;
list.dpKnapsack(bagSize,list.weight,100,list.value,()->{
	if(resultArray[i][v] == 0){
		resultArray[i][v] = Integer.MAX_VALUE;//因为这里是求最小值，所以二维表需要初始化最大。
	}
	if(k>=max(v-target,1)&&k<=max(v+target,100)){
		resultArray[i][v] = min(resultArray[i][v],resultArray[i-1][k]+abs(list.get(i-1).value-v));
		return false;
	}
	return false;
});
result = Integer.MAX_VALUE;  
for (i = 1; i <= 100; i++)  {  
    result = min(result, resultArray[count][i]);  
}  
println("调整代价之和："+result);